import UcRequest, { UcResponse } from './ucRequest'
/**
 * 账户登录
 * 
 * 这个只是登录UCenter，对于希望统一使用UCenter进行用户登录管理的可以使用该接口。
 * 
 * 如果只需要同步登录论坛，应该调用`UserSynLoginRequest`
 */
export default class UserLoginRequest extends UcRequest
{
    module = 'user'
    action = 'login'
    httpMethod = 'post'
    /**
     * 
     * @param {number} userId ucenter侧的账户ID
     * @param {string} password 账户密码
     * @param {string} ip 用户ip 
     */
    constructor(userId,password,ip = '0.0.0.0'){
        super()
        this.params = {
            username:userId,
            password:password,
            isuid:1, // 只考虑使用uId登录的情况，用户名和email在论坛端都有可能被修改，uid是几乎不会改变的
            checkques:0, // 自动登录不使用安全提问；在uc server侧，登录时的安全问题的校验逻辑也需要去掉 
            questionid:'',
            answer:'',
            ip:ip
        }
    }
    
}

export class UserLoginResponse extends UcResponse
{
    constructor(respRaw){
        super(respRaw);
        // login 成功后会返回xml格式的数据，里面实际上是有5个成员的数组
        let xmlParser = new DOMParser(),
            xmlDom = xmlParser.parseFromString(respRaw, 'application/xml')
        let uId = parseInt(xmlDom.getElementById(0).textContent); // [0] number 大于 0:返回用户 ID，表示用户登录成功 -1:用户不存在，或者被删除 -2:密码错  -3:安全提问错
        uId = isNaN(uId)?0:uId;
        if(uId > 0){
            this.userId = uId;
            this.username = xmlDom.getElementById(1).textContent; // [1] string 用户名
            this.password = xmlDom.getElementById(2).textContent; // [2] string 密码
            this.email = xmlDom.getElementById(3).textContent; // [3] string Email
            this.usernameDuplication = xmlDom.getElementById(4).textContent !== "0"; // [4] bool 用户名是否重名
            this.errCode = 1;
            this.errMsg = '用户登录成功';
            this.isSuccess = true;
        }else{
            this.userId = 0;
            this.errCode = uId;
            this.isSuccess = false;
            switch(this.errCode){
                case -1:
                    this.errMsg = '用户不存在，或者被删除';
                    break;
                case -2:
                    this.errMsg = '密码错';
                    break;
                case -3:
                    this.errMsg = '安全提问错'
                    break;
                default:
                    if(respRaw.length > 0){
                        this.errMsg = respRaw; // 如果响应的正文是文本信息，则直接作为错误消息
                    }else{
                        this.errMsg = '未知的错误！';
                    }
            }
        }
        
    }
}